搜索 K
Appearance
博客正在加载中...
Appearance
条件装配:满足 Conditional 指定的条件,则进行组件注入
@Conditional 是一个根注解,有很多派生的注解。我们可以在 IDEA 中,双击 shift,在类中查找@Conditional:
然后在类上按下 Ctrl + H,找到继承的类:
每个继承的注解都有各自的左右。例如
我们在 MyConfig 类中,取消注入 Pet 组件:
// @Bean("tom")
public Pet tomcatPet(){
return new Pet("tomcat");
}在 MainApplication 类中,判断下有没 Pet 和 user 组件:
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args);
boolean tom = run.containsBean("tom");
System.out.println("容器中Tom组件:" + tom);
boolean user01 = run.containsBean("user01");
System.out.println("容器中user01组件:" + user01);
}
}运行结果:
容器中Tom组件:false
容器中user01组件:true如果我们加上了@ConditionalOnBean:
@ConditionalOnBean(name = "tom")
@Bean //给容器中添加组件,以方法名作为组件的id,返回类型就是组件类型,返回的值,就是组件在容器中的实例
public User user01(){
User zhangsan = new User("zhangsan",18);
// user组件依赖了pet组件
zhangsan.setPet(tomcatPet());
return zhangsan;
}运行结果:
容器中Tom组件:false
容器中user01组件:false
除了将该注解标注在方法上,还可以标注在类上。如果这样做,只有容器中存在某个组件的时候,该类里配置的组件才会注入
在 SpringBoot 的底层,会有很多的条件装配,随着后续的学习,我们会逐步认识自动装配的重要性。
同学们也可自行尝试其他@Conditional 的衍生注解。